<?php
defined('ACCESS_ZYG') or exit('access invalid');
class Initial{
	static function run(){ 
		self::setChar();
		self::setError();
		self::setConst();
		self::setConf();
		self::setAutoLoad();
        self::setSess();
		self::setUrlPath();
		self::setDispach();
	}
	//告诉浏览器用什么字符集显示
	private static function setChar(){

		header('content-type:text/html;charset=utf-8');

	}//执行错误并且是所有错误
	private static function setError(){ 
		ini_set('display_errors',1);
		error_reporting(E_ALL);
	} 
	//设置一些常量，用于保存路径，在后面的脚本中用到路径时可以方便调用
	private static function setConst(){ 
		//绝对路径，网站根目录
		define('DS','/');
        define('SITE_URL','http://www.ddmcw.com');
		define('SITE_ROOT',str_replace('\\','/',__DIR__));
        define('CONF_DIR',SITE_ROOT.DS.'Conf');
		define('CONTROL_DIR',SITE_ROOT.DS.'Control');
		define('TEMPLATES_DIR',SITE_ROOT.DS.'Templates');

        //加载常量文件
        include_once CONF_DIR.DS."const.php";
	}
	private static function  setConf(){
		//配置文件返回数组，并保存在$GLOBALS全局变量中
		$GLOBALS['config'] = include_once CONF_DIR.DS."config.php";
	}
	private static function loadCore($class){
		if(is_file(CORE_DIR.DS."$class.class.php")) {
			include_once(CORE_DIR . DS . "$class.class.php");
		}
	}
	private static function loadControl($class){
		if(is_file(CONTROL_DIR.DS."$class.class.php")) {
			include_once(CONTROL_DIR . DS . "$class.class.php");
		}
	}
	private static function loadModel($class){ 
		if(is_file(MODEL_DIR.DS."$class.class.php")) {
			include_once(MODEL_DIR . DS . "$class.class.php");
		}
	}
	//自动加载,当实例化对象或是用类静态方法，用到哪个类文件，就加载哪个
	private static function setAutoLoad(){ 
		spl_autoload_register(array('Initial','loadControl'));
        spl_autoload_register(array('Initial','loadCore'));
		spl_autoload_register(array('Initial','loadModel'));

	}
    private static function setSess(){
        $session_save_dir = SESSION_SAVE_DIR;
        if(!is_dir($session_save_dir)){
            mkdir($session_save_dir,0777,true);
        }
        //规定session保存路径
        ini_set('session.save_path',$session_save_dir);
        session_start();
    }
	//路由解析，接收到请求的参数，来确定控制器和方法
	private static function setUrlPath(){ 
		$act= isset($_REQUEST['act'])?$_REQUEST['act']:'Index';
		$op = isset($_REQUEST['op'])?$_REQUEST['op']:'index';
		define('ACTION',$act);
		define('OPTION',$op);
	}
	//由控制器和方法参数来分发,然后分配到控制器的方法
	private static function setDispach(){ 
		$contorl = ACTION.'Action';
		$option = OPTION.'Op';
		$obj = new $contorl();
		$obj->$option(); 
	}
}